package com.itheima.callable;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

//测试类
public class CallableDemo01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建MyCallable对象，该对象实现了Callable接口
        MyCallable mc = new MyCallable();

        //创建FutureTask对象,以mc为构造方法的参数
        FutureTask<String> ft = new FutureTask<>(mc);

        //创建Thread对象，以ft为构造方法的参数
        Thread t1 = new Thread(ft);
        //开启线程
        t1.start();
        //获取线程执行结束后的结果，就是我们在call()方法里给定的返回值
        String s = ft.get();
        System.out.println(s);

        //注意：
        //    当程序执行到ft.get();的时候，它会死等到前面的线程执行结束
        //    获取到结果才会继续执行下面的内容。
        //    所以下面的for循环是会在t1.start();开启的线程完全执行结束后才会开始执行
        //    如果我们把ft.get();提到t1.start();前面，程序就会陷入死循环。
        for (int i = 0; i < 100; i++) {
            System.out.println("main"+i);
        }
    }
}
